package com.dzienniczekwedkarza.database;

/**
 * @author Rafał Wysogląd
 * 
 */

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseAdapter {
  
	
	private static final String DEBUG_TAG_ATLAS_RYB = "SQLite_ATLAS_RYB";                     
	private static final String DEBUG_TAG_DZIENNIK_POLOWOW = "SQLite_DZIENNIK_POLOWOW";       
	private static final String DEBUG_TAG_REGULAMINY_I_PRZEPISY = "SQLite_REGULAMINY_I_PRZEPISY";
	
	private static final String DB_FILE_NAME = "dziennikwedkarza.db";                             //DB_FILE_NAME to nazwa pliku, w którym przechowywana będzie nasza baza w katalogu: /data/data/<namespace aplikacji>/databases/.
	private static final int    DB_FILE_VERSION = 1;                                  			  
	
	
	
	private static final String TABLE_NAME_ATLAS_RYB = "Atlas_ryb";                             
	public static final String  ID_NAZWA_RYBY = "_id";                                          
    public static final String  ID_OPTIONS_NAZWA_RYBY = "INTEGER PRIMARY KEY AUTOINCREMENT";    
    public static final int     ID_COLUMN_NAZWA_RYBY = 0;                                       
    public static final String  NAZWA_RYBY = "NazwaRyby";                           			
    public static final String  NAZWA_RYBY_OPTIONS = "TEXT NOT NULL";               			
    public static final int     NAZWA_RYBY_COLUMN = 1;                                			
    public static final String  ICON = "Icon";
    public static final String  ICON_OPTIONS = "";
    public static final String  ICON_COLUMN = "2";
    
        
    
    
 	private static final String TABLE_NAME_DZIENNIK_POLOWOW = "Dziennik_polowow";  			      
	public static final String  ID_DZIENNIK_POLOWOW = "_id";                                       
    public static final String  ID_OPTIONS_DZIENNIK_POLOWOW = "INTEGER PRIMARY KEY AUTOINCREMENT"; 
    public static final int     ID_COLUMN_DZIENNIK_POLOWOW = 0;                                    
    public static final String  NAZWA_LOWISKA = "NazwaLowiska";                                    
    public static final String  NAZWA_LOWISKA_OPTIONS = "TEXT NOT NULL";                           
    public static final int     NAZWA_LOWISKA_COLUMN = 1;                                          
    
    
    
    private static final String TABLE_NAME_REGULAMINY_I_PRZEPISY = "Regulaminy_i_przepisy";
    public static final String  ID_REGULAMINY_I_PRZEPISY = "_id";
    public static final String  ID_OPTIONS_REGULAMINY_I_PRZEPISY = "INTEGER PRIMARY KEY AUTOINCREMENT";
    public static final int     ID_COLUMN_REGULAMINY_I_PRZEPISY = 0;  
    public static final String  NAZWA_REGULAMINU_I_PRZEPISU = "NazwaRegulaminuIPrzepisu";    
    public static final String  NAZWA_REGULAMINU_I_PRZEPISU_OPTIONS = "TEXT NOT NULL";
    public static final int     NAZWA_REGULAMINU_I_PRZEPISU_COLUMN = 1;       
    
    
    private SQLiteDatabase db;        
    private Context context;          
   	private DatabaseHelper dbHelper; 
   	
    	
    private static class DatabaseHelper extends SQLiteOpenHelper {

		public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
			super(context, name, factory, version);
			
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			
			Log.d(DEBUG_TAG_ATLAS_RYB, "Tworzenie bazy danych..");
			
			db.execSQL(DB_CREATE_TABLE_ATLAS_RYB);
			Log.d(DEBUG_TAG_ATLAS_RYB, "Tabela " + TABLE_NAME_ATLAS_RYB + " ver." + DB_FILE_VERSION + " utworzono");
			
			db.execSQL(DB_CREATE_TABLE_DZIENNIK_POLOWOW);
			Log.d(DEBUG_TAG_DZIENNIK_POLOWOW, "Tabela " + TABLE_NAME_DZIENNIK_POLOWOW + " ver." + DB_FILE_VERSION + " utworzono");
			
			db.execSQL(DB_CREATE_TABLE_REGULAMINY_I_PRZEPISY);
			Log.d(DEBUG_TAG_REGULAMINY_I_PRZEPISY, "Tabela " + TABLE_NAME_REGULAMINY_I_PRZEPISY + " ver." + DB_FILE_VERSION + " utworzono");
			
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			
			Log.d(DEBUG_TAG_ATLAS_RYB, "Aktualizacja bazy danych..");
			db.execSQL(DB_DROP_TABLE_ATLAS_RYB);
			Log.d(DEBUG_TAG_ATLAS_RYB, "Tabela " + TABLE_NAME_ATLAS_RYB + " aktualizacja ver." + oldVersion + " do ver." + newVersion);
			Log.d(DEBUG_TAG_ATLAS_RYB, "Wszystkie dane zostaną utracone.");
			
			db.execSQL(DB_DROP_TABLE_DZIENNIK_POLOWOW);
			Log.d(DEBUG_TAG_DZIENNIK_POLOWOW, "Tabela " + TABLE_NAME_DZIENNIK_POLOWOW + " aktualizacja ver." + oldVersion + " do ver." + newVersion);
			Log.d(DEBUG_TAG_DZIENNIK_POLOWOW, "Wszystkie dane zostaną utracone.");
			
			db.execSQL(DB_DROP_TABLE_REGULAMINY_I_PRZEPISY);
			Log.d(DEBUG_TAG_REGULAMINY_I_PRZEPISY, "Tabela " + TABLE_NAME_REGULAMINY_I_PRZEPISY + " aktualizacja ver." + oldVersion + " do ver." + newVersion);
			Log.d(DEBUG_TAG_REGULAMINY_I_PRZEPISY, "Wszystkie dane zostaną utracone.");
			
			onCreate(db);
			
		}
    	
    }
    
     /**
     * Tworzenie tabeli 'Atlas ryb' w bazie dziennikwedkarza.db
   	 */
    private static final String DB_CREATE_TABLE_ATLAS_RYB = 
    		"CREATE TABLE " + TABLE_NAME_ATLAS_RYB + " (" +
    		ID_NAZWA_RYBY  + " " + ID_OPTIONS_NAZWA_RYBY + ", " +
    		NAZWA_RYBY + " " + NAZWA_RYBY_OPTIONS +
    ");";
    
      
    /**
     * Usuwanie tabeli 'Atlas_ryb' w bazie dziennikwedkarza.db
   	 */
    private static final String DB_DROP_TABLE_ATLAS_RYB = 
    		"DROP TABLE IF EXISTS " + TABLE_NAME_ATLAS_RYB;
    
    
    /**
     * Tworzenie tabeli 'Dziennik_polowow' w bazie dziennikwedkarza.db
   	 */
    private static final String DB_CREATE_TABLE_DZIENNIK_POLOWOW = 
    		"CREATE TABLE " + TABLE_NAME_DZIENNIK_POLOWOW + " (" +
    		ID_DZIENNIK_POLOWOW  + " " + ID_OPTIONS_DZIENNIK_POLOWOW + ", " +
    		NAZWA_LOWISKA + " " + NAZWA_LOWISKA_OPTIONS +
    ");";
    
    /**
     * Usuwanie tabeli 'Dziennik_polowow' w bazie dziennikwedkarza.db
   	 */
    private static final String DB_DROP_TABLE_DZIENNIK_POLOWOW = 
    "DROP TABLE IF EXISTS " + TABLE_NAME_DZIENNIK_POLOWOW;
    
    /**
     * Tworzenie tabeli 'Regulaminy_i_przepisy' w bazie dziennikwedkarza.db
   	 */
    private static final String DB_CREATE_TABLE_REGULAMINY_I_PRZEPISY = 
    		"CREATE TABLE " + TABLE_NAME_REGULAMINY_I_PRZEPISY + " (" +
    		ID_COLUMN_REGULAMINY_I_PRZEPISY  + " " + ID_OPTIONS_REGULAMINY_I_PRZEPISY + ", " +
    		NAZWA_REGULAMINU_I_PRZEPISU + " " + NAZWA_REGULAMINU_I_PRZEPISU_OPTIONS +
    ");";
    
    /**
     * Usuwanie tabeli 'Regulaminy_i_przepisy' w bazie dziennikwedkarza.db
   	 */
    
    private static final String DB_DROP_TABLE_REGULAMINY_I_PRZEPISY = 
    		"DROP TABLE IF EXISTS " + TABLE_NAME_REGULAMINY_I_PRZEPISY;	
    
    
   	
    /**
     * @category konstruktor context 
   	 * @param context 
   	 */
   	public DatabaseAdapter(Context context) {
   		this.context = context;
   	}
    
    
    
    public DatabaseAdapter open(){
        dbHelper = new DatabaseHelper(context, DB_FILE_NAME, null, DB_FILE_VERSION);
        try {
            db = dbHelper.getWritableDatabase();
        } catch (SQLException e) {
            db = dbHelper.getReadableDatabase();
        }
        return this;
    }
    
    
    public void close() {
      dbHelper.close();    
    }
	
    
    public long DodajNowaRybeDoAtlasuRyb(String NazwaRyby) {
        ContentValues NowaRyba = new ContentValues();
        NowaRyba.put(NAZWA_RYBY, NazwaRyby);
        return db.insert(TABLE_NAME_ATLAS_RYB, null, NowaRyba);
    }

    
    public long DodajNoweLowiskoDoDziennikaPolowow(String NazwaLowiska) {
    	ContentValues NoweLowisko = new ContentValues();
    	NoweLowisko.put(NAZWA_LOWISKA, NazwaLowiska);
    	return db.insert(TABLE_NAME_DZIENNIK_POLOWOW, null, NoweLowisko);
    	
    }
    
    
   
    public Cursor PobierzWszystkieRybyZAtlasuRyb() {
        String[] columns = {ID_NAZWA_RYBY, NAZWA_RYBY};
        Cursor cursor = db.query(TABLE_NAME_ATLAS_RYB, columns, null, null, null, null, null);
        return cursor;  
    }
    
    
    
    
    public Cursor PobierzWszystkieRegulaminyIPrzepisy() {
        String[] columns = {ID_REGULAMINY_I_PRZEPISY, NAZWA_REGULAMINU_I_PRZEPISU};
        Cursor cursor = db.query(TABLE_NAME_REGULAMINY_I_PRZEPISY, columns, null, null, null, null, null);
        return cursor;  
    }
    
}




